package core;

import java.util.ArrayList;

/**
 * Representation d'une partition pour le noyau de l'application
 * @author Ganne, Pmartin
 */
public class Partition {
	/**
	 * Liste ordonnee des sections de la partition
	 */
	private ArrayList<Section> sections = new ArrayList<Section>();
	/**
	 * Titre de la partition
	 */
	private String titre;
	/**
	 * Auteur de la Partition
	 */
	private String auteur;
	/**
	 * Annee de parution de la Partition
	 */
	private String annee;
	/**
	 * Album a laquelle se ratache la Partition
	 */
	private String album;
	/**
	 * Tempo initial de la Partition
	 */
	private double tempo;
	/**
	 * Instrument correspondant a la Partition
	 */
	private String instrument;

	/**
	 * Constructeur d'une Partition
	 * @param titre: Le titre de la Partition
	 * @param auteur: L'auteur de la Partition
	 * @param annee: L'annee de parution de la Partition
	 * @param album: L'album a laquelle se ratache la Partition
	 * @param tempo: Le tempo initial de la Partition
	 * @param instrument: L'instrument correspondant a la Partition
	 */
	public Partition(String titre, 
			String auteur, 
			String annee, 
			String album, 
			double tempo, 
			String instrument){
		this.titre = titre; 
		this.auteur = auteur;
		this.annee = annee;
		this.album = album;
		this.tempo = tempo;
		this.instrument = instrument;
	}
	
	/**
	 * Methode permettant d'ajouter une section a la partition
	 * L'ordre d'ajout des section a son importance
	 * @param section: La section a ajouter
	 */
	public void addSection(Section section){
		this.sections.add(section);
	}
	
	/**
	 * Getter de la liste des sections
	 * @return La liste des sections de la partition
	 */
	public ArrayList<Section> getSection(){
		return this.sections;
	}
	
	/**
	 * Getter du titre de la partition
	 * @return Le titre de la partition
	 */
	public String getTitre(){
		return this.titre;	
	};
	
	/**
	 * Getter du tempo de la partition
	 * @return Le tempo de la partition
	 */
	public double getTempo(){
		return this.tempo;	
	}

	/**
	 * Genere le sous-titre d'une partition (export lilypond)
	 * @return le sous-titre d'une partition lilypond
	 */
	public String getSousTitre() {
		return "Année : "+this.annee+", album : \\\""+this.album+"\\\"";
	}

	/**
	 * Getter de l'auteur d'une partition
	 * @return L'auteur de la partition
	 */
	public String getAuteur() {
		return this.auteur;
	}

	/**
	 * Getter de l'instrument correspondant a la partition
	 * @return L'instrument correspondant a la partition
	 */
	public String getInstrument() {
		return this.instrument;
	};
	
}
